#import <stdio.h> #import <string.h> #import "TeXfigApplication.h" #import "TeXfigImageView.h"

@interface TeXitem: Object char *text; id image; BOOL printer; - text:(char*)newText; - (char*)text; - image:newImage; - image; - init; - free; - (BOOL)usePrinter; - usePrinter:(BOOL)flag; - write:(NXTypedStream*)typedStream; - read:(NXTypedStream*)typedStream; @end

@implementation TeXitem

- write:(NXTypedStream*)typedStream int printerVar,length; char buf[1]; [super write:typedStream]; printerVar = (printer)?1:0; if(text==NULL) length=0; else length = strlen(text); NXWriteTypes(typedStream,"ii", &printerVar,&length); if(text==NULL) buf[0]=''; NXWriteType(typedStream,"*",&buf); else NXWriteType(typedStream,"*",&text);

NXWriteRootObject(typedStream,image); return self;

- read:(NXTypedStream*)typedStream int printerVar, length; [super read:typedStream]; NXReadTypes(typedStream,"ii",&printerVar,&length); if(printerVar) printer=YES; else printer=NO; text = (char*)calloc(length+1,sizeof(char)); NXReadType(typedStream,"*",&text); text[length]=''; image = NXReadObject(typedStream); return self;

- (BOOL)usePrinter return printer;

- usePrinter:(BOOL)flag printer = flag; return self;

- init text=NULL; image=nil; printer=NO; return self;

- free if(text==NULL) free(text); [image free]; [super free]; return self;

- text:(char*)newText if(text!=NULL) free(text); if(newText==NULL) text=NULL; return self; text = (char*)calloc(strlen(newText)+1,sizeof(char)); strcpy(text,newText);

return self; - (char*)text return text; - image: newImage if(image!=nil) [image free]; image = newImage; return self; - image return image;

@end

@implementation TeXfigApplication

- appDidInit:sender if(!strlen(filename)) imageList = [[List new] init]; currentTeX=nil; [self insert: self]; printer=NO; [[imageView window] setTitleAsFilename:"Untitled"]; strcpy(filename,""); return self;

- printer:sender printer=YES; [screenButton setState: NO]; if(![printerButton state]) [printerButton setState:YES]; if(currentTeX!=nil) [currentTeX usePrinter:YES]; return self; - screen:sender printer=NO; [printerButton setState: NO]; if(![screenButton state]) [screenButton setState:YES]; if(currentTeX!=nil) [currentTeX usePrinter:NO]; return self;

- newTeXitem: newItem char buffer[48]; if(newItem==nil) return self;

currentTeX=newItem; [inputText selectAll: self]; [inputText setText:[newItem text]]; [imageView newImage:[newItem image]];

// set the buttons to reflect the printer status if([newItem usePrinter]) [self printer:self]; else [self screen:self];

// adjust the page number view sprintf(buffer,"[imageList count]); [pageNumberText setStringValue:buffer]; return self;

- doit:sender char buffer[1024], tmpfilename[512]; char TeXfilename[1024]; char epsfilename[1024]; char TeXbuffer[10000]; char scratch[1000]; id newimage; FILE *fpout;

chdir("/tmp"); // retreive the text from the text object [inputText getSubstring:(char *)buffer start:(int)0 length:(int)[inputText textLength]]; buffer[[inputText textLength]]='';

if(currentTeX!=nil) [currentTeX text:buffer];

// run it through TeX sprintf(TeXbuffer,"
documentstyle[times,fleqn,12pt]article
nonstopmode
parindent=0in
mathindent=0in
pagestyleempty
begindocument
enddocument